package com.lubase.core.service.flowform;


import com.lubase.core.service.flowform.model.ReturnInfoModel;
import com.lubase.core.service.flowform.model.TransferInfoModel;
import com.lubase.core.service.flowform.model.WFCmdRunModel;
import com.lubase.orm.model.LoginUser;

import java.util.List;

/**
 * @author lu
 * @date 2019/7/24
 * @description 工作流引擎适配器接口
 */
public interface WorkFlowAdapterService {
    Integer startWfByApi(String serviceId, String dataId, String userId);

    Integer runWfByApi(WFCmdRunModel runModel);


    /**
     * 退回到开始节点后，再次提交
     *
     * @param oInsId
     * @param userId
     * @return
     */
    Integer restartWf(String oInsId, String userId);

    /**
     * 流程待办表单保存数据，不提交
     *
     * @param runModel
     * @return
     */
    Integer saveData(WFCmdRunModel runModel);

    /***
     * 获取流程待办表单
     * @param oInsId
     * @return
     */
    Object getApprovalForm(String oInsId);
    /***
     * 移动端获取流程待办表单
     * @param oInsId
     * @return
     */
    Object getApprovalFormFromApp(String oInsId);

    /**
     * 获取流程监控表单
     *
     * @param fInsId
     * @param oInsId
     * @return
     */
    Object getApprovalHistoryForm(String fInsId, String oInsId);


    /**
     * 获取可以退回的流程节点列表
     *
     * @param fInsId
     * @return
     */
    List<ReturnInfoModel> getReturnBackTaskList(String fInsId);

    /**
     * 管理员退回某个流程
     *
     * @param fInsId
     * @param taskId
     * @param memo
     * @return
     */
    Integer returnBack(String fInsId, String taskId, String memo, String operatorUserId);

    /**
     * 管理员废弃流程
     *
     * @param finsId
     * @return
     */
    Integer giveUp(LoginUser userInfo, String finsId, String memo);

    /**
     * 根据流程实例获取当前未办理人
     *
     * @param fInsId
     * @return
     */
    List<TransferInfoModel> getCurrentApprovalUser(String fInsId);

    /**
     * 管理员转办流程
     *
     * @return
     */
    Integer transfer(String oInsId, String operatorUserId, String toUserId);
}
